package com.wmb.controller;

import com.wmb.bean.UserInfoBean;
import com.wmb.service.UserService;
import com.wmb.utils.MyUtils;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.util.List;

@Controller
public class UserAjaxController {

    // 依赖注入
    @Resource
    private UserService userService;

    ///////////////////////////////// ajax请求的两种方式 /////////////////////////////
    //@ResponseBody：该注解表示这个handler方法是按照ajax的处理流程进行处理，而不需要跳转视图解析进行处理（与之前的页面处理进行区别）
    @ResponseBody
    @RequestMapping("/ajaxdemo")
    public String doAjaxDemo(String userName,String userAddress){

        System.out.println("UserName:" + userName);
        System.out.println("UserAddress:" + userAddress);
        //【区别】 ajax请求返回的是ajax内容串； 普通的请求返回的是视图名
        //
        return "ok";
    }

    @ResponseBody
    @RequestMapping("/ajaxdemo2")
    public List<UserInfoBean> doAjaxDemo2(String userName, String userAddress){

        System.out.println("UserName:" + userName);
        System.out.println("UserAddress:" + userAddress);
        //【区别】 ajax请求返回的是ajax内容串； 普通的请求返回的是视图名
        //传入具体的id值
        List<UserInfoBean> userInfoBeans = userService.selectByPrimaryKey(65);

        /*
             直接返回结果集即可，springmvc框架会自动将结果集转换为json字符串（将结果集以数据库中数据的形式在页面显示）
             但是需要在springmvc的配置文件中进行相关的配置
         */
        return userInfoBeans;
    }

    /*
    ResponseEntity与@RequestMapping的区别：
          ResponseEntity的优先级高于@ResponseBody。在不是ResponseEntity的情况下才去检查有没有@ResponseBody注解。
          如果响应类型是ResponseEntity可以不写@ResponseBody注解，写了也没有关系。

          简单粗暴的讲:
                @ResponseBody可以直接返回Json结果，
                @ResponseEntity不仅可以返回json结果，还可以定义返回的HttpHeaders和HttpStatus
     */
    @RequestMapping("/ajaxdemo3")
    public ResponseEntity<List<UserInfoBean>> doAjaxDemo3(String userName, String userAddress){

        System.out.println("UserName:" + userName);
        System.out.println("UserAddress:" + userAddress);
        //【区别】 ajax请求返回的是ajax内容串； 普通的请求返回的是视图名
        //传入具体的id值
        List<UserInfoBean> userInfoBeans = userService.selectByPrimaryKey(1);

        /*
             直接返回结果集即可，springmvc框架会自动将结果集转换为json字符串（将结果集以数据库中数据的形式在页面显示）
             但是需要在springmvc的配置文件中进行相关的配置
         */
        //可以使用以下三种方法进行返回
         return ResponseEntity.ok(userInfoBeans);
        // return new ResponseEntity<>(userInfoBeans, HttpStatus.OK);
        //return ResponseEntity.status(HttpStatus.OK).body(userInfoBeans);

    }

    ////////////////////////ajax查询操作/////////////////////////////////////////
    //将前台页面的数据与数据库中的数据进行匹配，也就是根据在前台页面中输入的用户信息，把后台已经存储的该用户信息进行匹配
    @RequestMapping("/queryByParams")
    public ResponseEntity<List<UserInfoBean>> selectUserinfoByParams(UserInfoBean userInfoBean){

        System.out.println(userInfoBean);
        //【区别】 ajax请求返回的是ajax内容串； 普通的请求返回的是视图名
        //传入具体的id值
        List<UserInfoBean> userInfoBeans = userService.selectUserinfoByParams(userInfoBean);
        /*
             直接返回结果集即可，springmvc框架会自动将结果集转换为json字符串（将结果集以数据库中数据的形式在页面显示）
             但是需要在springmvc的配置文件中进行相关的配置
         */
        //可以使用以下三种方法进行返回，返回给ajax的data
        System.out.println(userInfoBeans);
        return ResponseEntity.ok(userInfoBeans);
        // return new ResponseEntity<>(userInfoBeans, HttpStatus.OK);
        //return ResponseEntity.status(HttpStatus.OK).body(userInfoBeans);

    }

    ////////////////////////////////// ajax的用户新增 /////////////////////////////////////////
    @ResponseBody
    @RequestMapping("/ajaxAddAndUpdateUserInfo")
    public String ajaxAddAndUpdateUserInfo(UserInfoBean userInfoBean, @RequestParam("file_userimg") MultipartFile multipartFile) {
        System.out.println("增加操作");
        // 调用servic层进行业务逻辑处理
        System.out.println("userInfobean::::");
        System.out.println(userInfoBean);
        System.out.println("--------上传的文件对象------------");
        System.out.println(multipartFile.getOriginalFilename());
        //使用文件上传的公共方法，进行文件上传处理
        MyUtils.doSingleFileUpload(multipartFile, "uploadfiles", "userimg", userInfoBean, "userimg");

        int i = userService.addAndUpdateUserInfo(userInfoBean);
        if (i > 0) {
            // 保存成功,返回给ajax引擎一个成功的标识
            System.out.println("保存成功！！");
            return "ok";
        } else {
            // 保存失败，,返回给ajax引擎一个成功的标识
            return "ng";
        }
    }

    /////////////////////////// 使用$.getJSON修改用户数据信息 ////////////////////////
    @RequestMapping("/queryUserInfoById")
    public ResponseEntity<UserInfoBean> queryUserInfoByID(Integer userId) {

        // ajax请求返回的是ajax内容串；
        // 普通的请求返回的是视图名【区别】
        UserInfoBean userInfoBean = userService.queryUserInfoByID(userId);
        // 直接返回结果集即可，springmvc框架会自动将结果集转换为json字符串，但是需要在springmvc的配置文件中进行相关配置
        // return ResponseEntity.status(HttpStatus.OK).body(userInfoBeans);
        //return ResponseEntity.ok(userInfoBeans);

        return new ResponseEntity<>(userInfoBean, HttpStatus.OK);

    }

    ///////////////////////////使用$.get删除用户//////////////////////////////////
    @ResponseBody
    @RequestMapping("/deleteUserId")
    public String ajaxDeleteUser(Integer userId) { //通过Id删除对用的用户

        int i = userService.deleteByPrimaryKey(userId);
        if (i > 0) {
            // 保存成功,返回给ajax引擎一个成功的标识
            System.out.println("删除成功！！");
            return "ok";
        } else {
            // 保存失败，,返回给ajax引擎一个成功的标识
            return "ng";
        }
    }

}
